

import os
import shutil
import subprocess
import time
import sys
import io

# 强制标准输出使用 UTF-8 编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')


# 检查 Java 环境
def check_java():
    try:
        # 尝试运行 'java -version' 来检测 Java 是否存在
        result = subprocess.run(['java', '-version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        if result.returncode == 0:
            print("Java 已安装")
            return True
        else:
            print("Java 未安装")
            return False
    except FileNotFoundError:
        # 如果找不到 Java，返回 False
        print("Java 未安装")
        return False

# 获取当前工作目录
current_directory = os.getcwd()

# 获取桌面路径
desktop = os.path.join(os.path.expanduser("~"), "Desktop")

# 检查 Java 是否已安装
if not check_java():
    # 如果没有安装 Java，运行 jdk21_installer.bat 文件
    a_bat_path = os.path.join(current_directory, "jdk21_installer.bat")
    if os.path.exists(a_bat_path):
        print("没有检测到 Java，正在运行 jdk21_installer.bat 进行安装...")
        subprocess.run([a_bat_path], shell=True)  # 等待 jdk21_installer.bat 执行完毕
        # 检查 Java 是否已经安装
        if check_java():
            print("Java 安装成功")
        else:
            print("Java 安装失败，请手动安装 Java")
    else:
        print("jdk21_installer.bat 文件不存在，请确保它在当前目录")
    exit()  # 如果 Java 没有安装，或者 jdk21_installer.bat 执行失败，则结束脚本

# 创建server文件夹（如果不存在）
server_folder = os.path.join(desktop, "server")


# 查找 .jar 文件和 open.bat 文件
jar_files = [f for f in os.listdir(current_directory) if f.endswith(".jar")]
bat_files = [f for f in os.listdir(current_directory) if f.lower() == "open.bat"]



if jar_files and bat_files:
    if not os.path.exists(server_folder):
        os.makedirs(server_folder)
    # 移动 .jar 文件到 server 文件夹并重命名为 server.jar
    for jar_file in jar_files:
        jar_file_path = os.path.join(current_directory, jar_file)
        server_jar_path = os.path.join(server_folder, "server.jar")
        shutil.move(jar_file_path, server_jar_path)
        print(f"{jar_file} 已移动并重命名为 server.jar")
    
    for bat_file in bat_files:
        bat_file_path = os.path.join(current_directory, bat_file)
        shutil.move(bat_file_path, server_folder)

    # 暂停 1 秒
    time.sleep(1)

    # 使用 subprocess.Popen() 启动 open.bat 文件
    bat_file_to_run = os.path.join(server_folder, "open.bat")
    process = subprocess.Popen([bat_file_to_run], shell=True)
    
    # 等待 open.bat 执行完毕
    process.communicate()

    # 开始检测 open.bat 是否已经销毁，并在销毁后修改 eula.txt
    print("open.bat 执行完毕，开始检测 eula.txt")

    # 定时检查 open.bat 是否销毁
    while os.path.exists(bat_file_to_run):
        print("open.bat 仍在运行中，等待 3 秒后重新检测...")
        time.sleep(3)

    print("open.bat 已销毁，开始检查 eula.txt")

    # 检查 eula.txt 是否存在并修改
    eula_file_path = os.path.join(server_folder, "eula.txt")
    if os.path.exists(eula_file_path):
        # 读取 eula.txt 文件
        with open(eula_file_path, 'r') as file:
            eula_content = file.read()

        # 替换 eula=false 为 eula=true
        if "eula=false" in eula_content:
            eula_content = eula_content.replace("eula=false", "eula=true")
            with open(eula_file_path, 'w') as file:
                file.write(eula_content)
            print("eula.txt 已更新为 eula=true")
        else:
            print("eula.txt 中已设置为 eula=true，无需修改")
    else:
        print("没有找到 eula.txt 文件")
else:
    print("当前目录没有 .jar 文件或 open.bat 文件")
    print("请将 .jar 文件放到当前目录后重新运行脚本")
    input("按任意键退出程序...")  # 保持窗口打开，直到用户按键关闭